import { create } from 'zustand'
import { queryParams } from '@/utils/inject'
import { sleep } from '@/utils'

const useStore = create((set, get) => ({
  pageConfig: {
    page: queryParams.page || 'home',
  },
  dialogConfig: {
    dialog: queryParams.dialog,
  },
  toastConfig: {
    toast: '',
  },
  /**
   * 打开页面
   * @param {String} page 页面组件
   * @param {Object} params 页面参数
   * @param {boolean} replace 是否替换
   */
  openPage(page, params, replace = false) {
    if (replace) {
      set({ pageConfig: { page, params } })
      return
    }

    const mergedParams = Object.assign(
      { id: queryParams.id },
      __DEV__ ? { url: queryParams.url } : {},
      { page },
      params,
    )
    // return mnb('navigator.open', { path: `nc/page?${serializeParams(mergedParams)}` })
  },
  /**
   * 关闭页面
   */
  closePage() {
    // mnb('navigator.close')
  },
  /**
   * 打开弹窗
   * @param {String} dialog 弹窗组件
   * @param {Object} params 弹窗参数
   */
  openDialog(dialog, params) {
    set({ dialogConfig: { dialog, params } })
  },
  /**
   * 关闭弹窗
   */
  async closeDialog() {
    set({ dialogConfig: { ...get().dialogConfig, closing: true } })
    await sleep(320)
    set({ dialogConfig: {} })
  },
  /**
   * 展示toast提示
   * @param {string} content 文本内容
   */
  showToast(toast) {
    clearTimeout(get().toastConfig.timer)
    set({ toastConfig: {} })

    const timer = setTimeout(() => {
      get().hideToast()
    }, 2000)

    set({ toastConfig: { toast, timer } })
  },
  /**
   * 隐藏toast提示
   */
  hideToast() {
    clearTimeout(get().toastConfig.timer)

    const timer = setTimeout(() => {
      set({ toastConfig: {} })
    }, 320)

    set({ toastConfig: { ...get().toastConfig, closing: true, timer } })
  },
}))

export default useStore
